package com.sdry.basic.service;

import com.sdry.basic.entity.AttendanceTeam;
import com.sdry.basic.entity.AttendanceTeamType;
import com.sdry.basic.entity.AttendanceTeamUser;
import com.sdry.system.entity.SysUser;
import net.sf.json.JSONObject;

import java.util.List;

/**
 * @author lian
 * @date 2020/04/13
 */
public interface AttendanceService {

    /**
     * 分页查询班组类型
     * @param  att 参数类型：班组类型实体 AttendanceTeamType
     * @return
     *  返回 null 表示没有找到
     */
    List<AttendanceTeamType> queryAttendanceType(AttendanceTeamType att);

    /**
     * 条件查询班组类型的数据有几条
     * @param  att 参数类型：班组类型实体 AttendanceTeamType
     * @return
     *  返回 null 表示没有找到
     */
    Long countAttendanceType(AttendanceTeamType att);

    /**
     * 给班组类型表插入数据
     * @param  att 参数类型：班组类型实体 AttendanceTeamType
     * @return
     *  返回 正数 表示插入成功
     */
    Long insertAttendanceType(AttendanceTeamType att);

    /**
     * 修改班组类型表数据
     * @param  att 参数类型：班组类型实体 AttendanceTeamType
     * @return
     *  返回 正数 表示修改成功
     */
    Long updateAttendanceType(AttendanceTeamType att);

    /**
     * 删除班组类型表数据
     * @param  ids 主键ID用逗号（，）拼接的字符串
     * @return
     *  返回 正数 表示删除成功
     */
    Long deleteAttendanceType(String ids);

    /**
     * 查询所有班组
     * @return 返回 null 表示没有找到
     */
    List<AttendanceTeam> getTeamList();

    /**
     * 查查询未绑定班组的用户
     * @param  user 用户类型实体：SysUser
     * @return 返回 null 表示没有找到
     */
    List<SysUser> queryUsersAreNotOnTheTeam(SysUser user);

    /**
     * 给班组用户表插入数据，返回ID
     * @param param 实体类
     * @return  返回正数，插入成功
     */
    Long insertAttendanceUser(AttendanceTeamUser param);

    /**
     * 根据班组ID查询班组的成员
     * @return 返回null.没查到数据
     */
    List<SysUser> queryTeamMembers(Long teamId);

    /**
     * 根据主键拼接的字符串删除班组中的用户
     * @param ids 用户主键拼接的字符串
     * @return 返回正数，删除成功
     */
    Long deleteAttendanceTeamUser(String ids);

    /**
     * APP打卡功能
     * @param userId 用户ID
     * @param lat   打卡维度
     * @param lon   打卡经度
     * @param clockType 打卡状态（0：上班，1：下班）
     * @return  是否打卡成功
     */
    JSONObject appAttendanceClock(String userId, String lat, String lon, String clockType);
}
